package main

import (
	"fmt"
	"net"
	"os"
)

//UDP服务端 没有与客户端建立连接 并不知道客户端是否接收到
func main() {
	//申明端口
	service := ":5000"
	//注册udp4端口地址
	udpAddr, err := net.ResolveUDPAddr("udp4", service)
	checkErr(err)
	//设置监听接口
	conn, err := net.ListenUDP("udp", udpAddr)
	checkErr(err)
	for {
		handleClient(conn)
	}
}

/**
 * @Author:      YaoWang
 * @DateTime:    2017-04-20 14:15:05
 * @Description: 检验错误
 */
func checkErr(err error) {
	if err != nil {
		fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
		os.Exit(1)
	}
}

/**
 * @Author:      YaoWang
 * @DateTime:    2017-04-20 14:15:37
 * @Description: 等待客户端连接
 */
func handleClient(conn *net.UDPConn) {
	//延时关闭连接
	defer conn.Close()
	var buf [512]byte
	for { //读取数据 n数据长度 rAddr数据来源地址 err错误
		n, rAddr, err := conn.ReadFromUDP(buf[0:])
		if err != nil {
			return
		}
		fmt.Println("Receive from client", rAddr.String(), string(buf[0:n]))
		//返回给客户端数据
		_, err2 := conn.WriteToUDP([]byte("Welcome client!"), rAddr)
		if err2 != nil {
			return
		}
	}
}
